perm filename MAPS1.LST[SYS,HE] blob
sn#062654 filedate 1973-09-17 generic text, type T, neo UTF8
M SAIL 17-SEP-73 13:23 MAPS1 1-1
M
␈BβπCOMMENT␈A007502 00037 COMMENT ⊗ VALID 00016 PAGES
007502 00002 C REC PAGE DESCRIPTION
007502 00003 C00001 00001
007502 00004 C00002 00002 MAPS1 - programs for the parsing of the scene.
007502 00005 C00006 00003 _ external and forward procedures - LCRV
007502 00006 C00008 00004 _ DTRCE, LINDL, QTRCE
007502 00007 C00010 00005 _ MLCR, REVIVE, UPPDAL
007502 00008 C00012 00006 _ UNTST, BREAK
007502 00009 C00014 00007 _ CLUPSC
007502 00010 C00017 00008 _ FUSABL
007502 00011 C00021 00009 _ LFDIF
007502 00012 C00026 00010 _ MAP (VCRKEY)
007502 00013 C00030 00011 _ PARSE
007502 00014 C00033 00012 _ PARSE cont
007502 00015 C00035 00013 _ PARSE cont
007502 00016 C00038 00014 _ PARSE cont
007502 00017 C00040 00015 _ PARSE cont
007502 00018 C00042 00016 _ PARSE cont
007502 00019 C00045 ENDMK
007502 00020 C⊗;
M SAIL 17-SEP-73 13:23 MAPS1 2-1
M
␈BβπCOMMENT␈A007502 00021
COMMENT MAPS1 - programs for the parsing of the scene.;
007502 00002
␈Bβ¬ENTRY␈A007502 00003 ENTRY LCRV,LCRL,DTRCE,LINDL,QTRCE,MLCR,REVIVE,CLUPSC,
007502 00004 UPPDAL,FUSABL,LFDIF,MAP,PARSE;
007502 00005
␈Bβ¬BEGIN↓ε070073α↓ε070121α↓ε070147α↓ε070162α↓ε070210α↓ε070223α↓ε070251α
¬MAPS1␈A007502 00006 BEGIN "MAPS1"
007502 00007
␈B↓ε070325αεε070401εε070427␈A007502 00008 DEFINE QC(I)="&"" I=""&CVS(I)",
␈Bεε070414εε070455␈A007502 00009 QCO(I)="&"" I=""&CVOS(I)",
␈Bεε070427εε070503␈A007502 00010 QCR(R)="&"" R=""&CVF(R)",
␈Bεε070455␈A007502 00011 NOTHING="",
␈Bεε070544␈A007502 00012 CL="'15&'12",
␈Bεε070557␈A007502 00013 QSCOR="&"" SCORE=""&CVOS(CMPL+1)&""/""&CVOS(SCO)",
␈Bεε070605␈A007502 00014 BL="'40",
␈Bεε070633␈A007502 00015 QENP="EXTERNAL PROCEDURE",
␈Bεε070661␈A007502 00016 QS="STRING",
␈Bεε070707␈A007502 00017 QESP="EXTERNAL SIMPLE STRING PROCEDURE",
␈Bεε070735␈A007502 00018 QI="INTEGER",
␈Bεε070763␈A007502 00019 QR="REAL",
␈Bεε071011␈A007502 00020 QRI="REFERENCE INTEGER",
␈Bεε071037␈A007502 00021 QRR="REFERENCE REAL",
␈Bεε071065␈A007502 00022 QEP="EXTERNAL SIMPLE PROCEDURE",
␈Bεε071113␈A007502 00023 QEIP="EXTERNAL SIMPLE INTEGER PROCEDURE",
␈Bεε071141␈A007502 00024 QERP="EXTERNAL SIMPLE REAL PROCEDURE",
␈Bεε071167␈A007502 00025 QFOP="FORWARD INTERNAL SIMPLE PROCEDURE",
␈Bεε071215␈A007502 00026 QFOIP="FORWARD INTERNAL SIMPLE INTEGER PROCEDURE",
␈Bεε071243␈A007502 00027 QFORP="FORWARD INTERNAL SIMPLE REAL PROCEDURE",
␈Bεε071271␈A007502 00028 _="COMMENT",
␈Bεε071317εε071360εε071373εε071406εε071421␈A007502 00029 LOOP(I,J,K,L)="FOR I←J STEP L UNTIL K DO",
␈Bεε071345␈A007502 00030 QTRC="IF DTRACE∨MAPTRC LAND '12000 THEN QTRCE",
␈Bεε071421␈A007502 00031 DTRC="IF DTRACE∨MAPTRC LAND '10000 THEN DTRCE",
␈Bεε071373␈A007502 00032 LINSET="DISW←1; DTRC(""LINSRT:""QC(IFREEL)); LINSRT",
␈Bεε071447εε071510␈A007502 00033 BELCRE(I)="LVNEXT(I,-1)",
␈Bεε071475␈A007502 00034 SAFEX="SAFE";
␈BβπINTEGER↓ε071510α↓ε071551α↓ε071564α␈A007502 00035 INTEGER IA,DCHAN,CURMAP;
␈BβλINTERNALβπINTEGER↓ε071577α↓ε071612α↓ε071625α↓ε071640α↓ε071653α↓ε071666α↓ε071701α↓ε071714α↓ε071727α␈A007502 00036 INTERNAL INTEGER PROT,PLIN,PVER,AD0,LNCS1,LNCS2,RAYS,ICH,CMPIND,
␈B↓ε071742α↓ε071755α↓ε071770α↓ε072003α↓ε072016α↓ε072031α↓ε072044α↓ε072057α↓ε072072α↓ε072105α↓ε072120α↓ε072133α␈A007502 00037 BRCH,EOF,DTRACE,KMP,RUL,MDCTR,DISW,FLMIND,FTSW,LFDBT,BESTMP,NPRS,
␈B↓ε072146α↓ε072161α↓ε072174α↓ε072207α↓ε072222α␈A007502 00038 N1,N2,TC,TCS,LNCRE0;
␈BβλEXTERNALβπINTEGER↓ε072235α↓ε072250α↓ε072263α↓ε072276α↓ε072311α↓ε072324α␈A007502 00039 EXTERNAL INTEGER NOEPA,NOL,MAXNOL,MAXNOV,LNCRE1,LNCRE2,
␈B↓ε072337α↓ε072352α↓ε072365α↓ε072400α↓ε072413α↓ε072426α↓ε072441α↓ε072454α␈A007502 00040 PFTOT,MODIF,PLFTOT,MAXPLS,MAXPVS,MAPTRC,SCO,CMPL;
␈BβλEXTERNALβ∧REAL↓ε072467α↓ε072502α␈A007502 00041 EXTERNAL REAL RWIC,RMAP;
␈B¬ε071475β∧SAFEβλEXTERNALβπINTEGERβ¬ARRAY↓ε072515α↓ε072543α↓ε072556α↓ε072571α↓ε072604α␈A007502 00042 SAFEX EXTERNAL INTEGER ARRAY DICH[0:1],LCREDE,LFEAT,LVERCO,LINK,
␈B↓ε072617α↓ε072632α↓ε072645α↓ε072660α↓ε072673α↓ε072706α↓ε072721α↓ε072747α␈A007502 00043 LVERSI,PLINES,PVERTS,PPTRL,PLINE,PLINE2,PFPRO,PFEAT,
␈B↓ε072762α↓ε072775α↓ε072734α␈A007502 00044 LVER,CFEAT[1:1],PFPTR[0:1];
␈B¬ε071475β∧SAFEβλEXTERNALβ∧REALβ¬ARRAY↓ε073010α↓ε073023α↓ε073036α↓ε073051α↓ε073064α↓ε073077α↓ε073112α↓ε073125α␈A007502 00045 SAFEX EXTERNAL REAL ARRAY XVCOR,YVCOR,XLCOR,YLCOR,CXL,CYL,CCL,RLEN[1:1];
␈B¬ε071475β∧SAFEβλEXTERNALβεSTRINGβ¬ARRAY↓ε073140α␈A007502 00046 SAFEX EXTERNAL STRING ARRAY PNAME[1:1];
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 3-1
MAPS1
␈B¬ε071271βπCOMMENT␈A007502 00047
_ external and forward procedures - LCRV;
007502 00002
␈B¬ε071065βλEXTERNALβεSIMPLEβ PROCEDURE↓ε073153α ε073227↓I ε073242↓J␈A007502 00003 QEP LINDEL(QI I,J);
␈B¬ε071113βλEXTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε073214α ε073303↓I ε073316↓J ε073331↓K␈A007502 00004 QEIP BITS(QI I,J,K);
␈B¬ε071113βλEXTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε073270α ε073372¬CODES␈A007502 00005 QEIP MAPCONV(QS CODES);
␈B¬ε071113βλEXTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε073357α ε073433↓X ε073446↓Y␈A007502 00006 QEIP INREK(QR X,Y);
␈B¬ε071065βλEXTERNALβεSIMPLEβ PROCEDURE↓ε073420α␈A007502 00007 QEP UPPDAT;
␈B¬ε071065βλEXTERNALβεSIMPLEβ PROCEDURE↓ε073474α␈A007502 00008 QEP FTEX;
␈B¬ε070633βλEXTERNALβ PROCEDURE↓ε073522α ε073576↓I␈A007502 00009 QENP XREFC(QI I);
␈B¬ε071065βλEXTERNALβεSIMPLEβ PROCEDURE↓ε073563α␈A007502 00010 QEP UNXREF;
␈B¬ε071113βλEXTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε073624α ε073665↓I␈A007502 00011 QEIP LACT(QI I);
␈B¬ε071141βλEXTERNALβεSIMPLEβ∧REALβ PROCEDURE↓ε073652α ε073726↓I ε073741↓J␈A007502 00012 QERP ANGLIN(QI I,J);
␈B¬ε071113βλEXTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε073713α ε074002↓I␈A007502 00013 QEIP LVOPP(QI I);
␈B¬ε071141βλEXTERNALβεSIMPLEβ∧REALβ PROCEDURE↓ε073767α ε074043↓R␈A007502 00014 QERP SQRT(QR R);
␈B¬ε071113βλEXTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε074030α ε103742↓I ε103755↓J␈A007502 00015 QEIP MAX0(QI I,J);
␈B¬ε071113βλEXTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε103727α ε104016αX1 ε104031αY1 ε104044αX2 ε104057αY2 ε104072αX3 ε104105αY3 ε104120αX4 ε104133αY4 ε104146αIC␈A007502 00016 QEIP KARN(QR X1,Y1,X2,Y2,X3,Y3,X4,Y4; QI IC);
␈B¬ε071065βλEXTERNALβεSIMPLEβ PROCEDURE↓ε104003α ε104207αX1 ε104222αY1 ε104235αX2 ε104250αY2 ε104263αWI ε104276αRL␈A007502 00017 QEP REKOP(QR X1,Y1,X2,Y2,WI; QRR RL);
␈B¬ε071065βλEXTERNALβεSIMPLEβ PROCEDURE↓ε104174α ε104337↓I ε104352↓X ε104365↓Y ε104400αWE␈A007502 00018 QEP WEIGHV(QI I; QRR X,Y,WE);
␈B¬ε071113βλEXTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε104324α␈A007502 00019 QEIP MAPREC;
␈B¬ε071065βλEXTERNALβεSIMPLEβ PROCEDURE↓ε104426α␈A007502 00020 QEP PRECAL;
␈B¬ε071065βλEXTERNALβεSIMPLEβ PROCEDURE↓ε104454α␈A007502 00021 QEP CALC;
␈B¬ε071113βλEXTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε104502α ε104543↓I ε104556↓J␈A007502 00022 QEIP LVNEXT(QI I,J);
␈B¬ε071065βλEXTERNALβεSIMPLEβ PROCEDURE↓ε104530α ε104617↓I␈A007502 00023 QEP REGREF(INTEGER I);
␈B¬ε071113βλEXTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε104604α ε104660βISV ε104673βICV ε104706∧LADD␈A007502 00024 QEIP MSCVCO(QI ISV, ICV, LADD);
␈B¬ε071113βλEXTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε104645α␈A007502 00025 QEIP NEXVER;
␈B¬ε071113βλEXTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε104734α ε104775↓L␈A007502 00026 QEIP LCRL(QI L);
007502 00027
␈B¬ε071271βπCOMMENT␈A007502 00028 _ return LCREDE entry for s.v. SV (sign and low 4 octal digits only);
007502 00029
␈BβλINTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε104762α
∧LCRVβπINTEGER↓ε105036α␈A007503 00030 INTERNAL SIMPLE INTEGER PROCEDURE LCRV(INTEGER SV);
␈BβεRETURN↓ε072543↓ε105036β∧LAND∞∧LCRV ε105036αSV␈A007517 00031 RETURN(LCREDE[(SV+1)%2] LAND '400000007777);
007517 00032
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 4-1
MAPS1
␈B¬ε071271βπCOMMENT␈A007517 00033
_ DTRCE, LINDL, QTRCE;
007517 00002
␈B¬ε071271βπCOMMENT␈A007517 00003 _ Produces trace output on file "PARSE.TRC" if MAPREC bit 12 is set.;
007517 00004
␈BβλINTERNALβεSIMPLEβ PROCEDURE↓ε105023α
¬DTRCEβεSTRING↓ε105125α␈A007517 00005 INTERNAL SIMPLE PROCEDURE DTRCE(STRING S);
␈Bβ¬BEGIN
∧DTRC␈A007517 00006 BEGIN "DTRC"
␈BβαIF↓ε071770↓ε071551↓ε071770↓ε071770↓ε072426β∧LANDβ∧THEN␈A007532 00007 IF DTRACE∧DCHAN=-1∨¬DTRACE∧(DTRACE←MAPTRC LAND '10000) THEN
␈Bβ¬BEGIN␈A007532 00008 BEGIN
␈B↓ε015113↓ε071551↓ε016467↓ε071742↓ε071755␈A007546 00009 OPEN(DCHAN←GETCHAN,"DSK",0,0,2,100,BRCH,EOF);
␈B↓ε015335↓ε071551↓ε015167↓ε072133↓ε072133↓ε071510␈A007564 00010 ENTER(DCHAN,"PARS"&CVS(NPRS←NPRS+1)&".TRC",IA)
␈BββEND␈A007564 00011 END;
␈BβαIF↓ε071770↓ε071770↓ε072426β∧LANDβ∧THEN␈A007572 00012 IF DTRACE∧¬(DTRACE←MAPTRC LAND '10000) THEN
␈Bβ¬BEGIN↓ε015260↓ε071551↓ε071551ββEND␈A007576 00013 BEGIN CLOSE(DCHAN); DCHAN←-1 END;
␈B↓ε072174↓ε072174␈A007601 00014 TC←TC+1;
␈BβαIF↓ε072426β∧LANDβ∧THEN↓ε016437↓ε015167↓ε072174␈A007611 00015 IF MAPTRC LAND '40000 THEN OUTSTR('11&CVS(TC));
␈BβαIF↓ε071770β∧THEN↓ε015035↓ε071551¬ε070544↓ε015167↓ε072174↓ε105125␈A007627 00016 IF DTRACE THEN OUT(DCHAN,CL&CVS(TC)&'11&S);
␈BββEND∞∧DTRC∞¬DTRCE ε105125↓S␈A007635 00017 END "DTRC";
007635 00018
␈B¬ε071271βπCOMMENT␈A007635 00019 _ line deletion with tracing;
007635 00020
␈BβλINTERNALβεSIMPLEβ PROCEDURE↓ε105112α
¬LINDLβπINTEGER↓ε105214α↓ε105166α␈A007635 00021 INTERNAL SIMPLE PROCEDURE LINDL(INTEGER L,I);
␈Bβ¬BEGIN↓ε072044¬ε071421βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105023¬ε070401↓ε015167↓ε105214↓ε073153↓ε105214↓ε105166ββEND∞¬LINDL ε105214↓L ε105166↓I␈A007657 00022 BEGIN DISW←1; DTRC("LINDEL:"QC(L)); LINDEL(L,I) END;
007657 00023
007657 00024
␈B¬ε071271βπCOMMENT␈A007657 00025 _ Produces trace typeouts, and pauses if correct bit is set in MAPTRC.
007657 00026 Also puts out trace on DSK-file "PARSE.TRC" if bit 12 of MAPTRC is set.;
007657 00027
␈BβλINTERNALβεSIMPLEβ PROCEDURE↓ε105153α
¬QTRCEβεSTRING↓ε105522α␈A007657 00028 INTERNAL SIMPLE PROCEDURE QTRCE(STRING S);
␈Bβ¬BEGIN
∧QTRC␈A007657 00029 BEGIN "QTRC"
␈B¬ε071421βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105023↓ε105522␈A007667 00030 DTRC(S);
␈BβαIF↓ε072426β∧LANDβ∧THEN␈A007672 00031 IF MAPTRC LAND '2000 THEN
␈Bβ¬BEGIN␈A007672 00032 BEGIN
␈B↓ε016437¬ε070544↓ε105522␈A007700 00033 OUTSTR(CL&S);
␈BβαIF↓ε072426β∧LANDβ∧THEN␈A007703 00034 IF MAPTRC LAND '4000 THEN
␈Bβ¬BEGIN␈A007703 00035 BEGIN
␈Bβ¬WHILE↓ε071714↓ε016235↓ε071714βαDO¬ε070455␈A007713 00036 WHILE (ICH←INCHRW)≠":"∧ICH≠"←" DO NOTHING;
␈BβαIF↓ε071714β∧THEN↓ε072426↓ε073270↓ε016315␈A007721 00037 IF ICH="←" THEN MAPTRC←MAPCONV(INSTR(":"))
␈BββEND␈A007722 00038 END
␈BββEND␈A007722 00039 END;
␈BββEND∞∧QTRC∞¬QTRCE ε105522↓S␈A007724 00040 END "QTRC";
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 5-1
MAPS1
␈B¬ε071271βπCOMMENT␈A007724 00041
_ MLCR, REVIVE, UPPDAL;
007724 00002
␈B¬ε071271βπCOMMENT␈A007724 00003 _ Pushes LC onto the LCREDE-stack for line LN.;
007724 00004
␈BβλINTERNALβεSIMPLEβ PROCEDURE↓ε105331α
∧MLCRβπINTEGER↓ε105611α↓ε105700α␈A007724 00005 INTERNAL SIMPLE PROCEDURE MLCR(INTEGER LN,LC);
␈Bβ¬BEGIN
∧MLCR␈A007724 00006 BEGIN "MLCR"
␈B↓ε072044␈A007726 00007 DISW←1;
␈B¬ε071421βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105023¬ε070401↓ε015167↓ε105611¬ε070401↓ε015167↓ε105700␈A007747 00008 DTRC("MLCR: "QC(LN)QC(LC));
␈BβαIF↓ε105611β∧THEN↓ε072543↓ε105611↓ε072543↓ε105611ββLSHββLOR↓ε105700␈A007760 00009 IF LN THEN LCREDE[LN]←LCREDE[LN] LSH 12 LOR LC
␈BββEND∞∧MLCR∞∧MLCR ε105611αLN ε105700αLC␈A007764 00010 END "MLCR";
007764 00011
007764 00012
␈B¬ε071271βπCOMMENT␈A007764 00013 _ Pops LCREDE off top of stack, leaving next-to-newest value.;
007764 00014
␈BβλINTERNALβεSIMPLEβ PROCEDURE↓ε105550α
εREVIVEβπINTEGER↓ε106002α␈A007764 00015 INTERNAL SIMPLE PROCEDURE REVIVE(INTEGER LN);
␈Bβ¬BEGIN
εREVIVE␈A007764 00016 BEGIN "REVIVE"
␈B↓ε072044␈A007766 00017 DISW←1;
␈B¬ε071421βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105023¬ε070401↓ε015167↓ε106002␈A010001 00018 DTRC("REVIVE: "QC(LN));
␈BβαIF↓ε106002β∧THEN↓ε072543↓ε106002↓ε072543↓ε106002ββLSH␈A010010 00019 IF LN THEN LCREDE[LN]←LCREDE[LN] LSH -12
␈BββEND∞εREVIVE∞εREVIVE ε106002αLN␈A010015 00020 END "REVIVE";
010015 00021
␈B¬ε071271βπCOMMENT␈A010015 00022 _ Updates line-display, and waits for a ":" iff SW is on.;
010015 00023
␈BβλINTERNALβεSIMPLEβ PROCEDURE↓ε105726α
εUPPDALβπINTEGER↓ε106071α␈A010015 00024 INTERNAL SIMPLE PROCEDURE UPPDAL(INTEGER SW);
␈Bβ¬BEGIN
εUPPDAL␈A010015 00025 BEGIN "UPPDAL"
␈BβαIF↓ε072044β∧THENβεRETURNβ∧ELSE↓ε072044␈A010023 00026 IF ¬DISW THEN RETURN ELSE DISW←0;
␈BβαIF↓ε106071β∧THEN␈A010025 00027 IF SW>0 THEN
␈Bβ¬BEGIN␈A010025 00028 BEGIN
␈B↓ε072311↓ε072222␈A010027 00029 LNCRE1←LNCRE0;
␈B↓ε072515↓ε072515↓ε072515␈A010041 00030 DICH[4]←DICH[5]←DICH[6]←1;
␈B↓ε073420␈A010042 00031 UPPDAT;
␈BβαIF↓ε072426β∧LANDβ∧THENβ¬BEGIN↓ε104426↓ε104454ββEND␈A010047 00032 IF MAPTRC LAND '100000 THEN BEGIN PRECAL; CALC END;
␈B↓ε016437␈A010052 00033 OUTSTR(" D ");
␈B↓ε072311↓ε071653␈A010052 00034 LNCRE1←LNCS1
␈BββEND␈A010054 00035 END;
␈BβαIF↓ε106071β∧THEN␈A010056 00036 IF SW THEN
␈Bβ¬BEGIN␈A010056 00037 BEGIN
␈Bβ¬WHILE↓ε071714↓ε016235↓ε071714βαDO¬ε070455␈A010066 00038 WHILE (ICH←INCHRW)≠":"∧ICH≠"←" DO NOTHING;
␈BβαIF↓ε071714β∧THEN↓ε072426↓ε073270↓ε016315␈A010074 00039 IF ICH="←" THEN MAPTRC←MAPCONV(INSTR(":"))
␈BββEND␈A010075 00040 END
␈BββEND∞εUPPDAL∞εUPPDAL ε106071αSW␈A010077 00041 END "UPPDAL";
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 6-1
MAPS1
␈B¬ε071271βπCOMMENT␈A010077 00042
_ UNTST, BREAK;
010077 00002
␈B¬ε071271βπCOMMENT␈A010077 00003 _ tests cv for active and inactive lines. Returns zero if all lines
010077 00004 connected to cv are active or inactive. If some lines of each type
010077 00005 are connected, it returns the total number of lines;
010077 00006
␈BβεSIMPLEβπINTEGERβ PROCEDURE↓ε106056α
¬UNTSTβπINTEGER↓ε106247α␈A010077 00007 SIMPLE INTEGER PROCEDURE UNTST(INTEGER CV);
␈Bβ¬BEGIN␈A010077 00008 BEGIN
␈BβπINTEGER↓ε106336α↓ε106351α↓ε106364α↓ε106377α↓ε106412α␈A010077 00009 INTEGER L, FL, FLG, N, RET;
␈B↓ε106351↓ε106336↓ε072617↓ε106247␈A010105 00010 FL ← L ← LVERSI[CV];
␈BβαIF↓ε106351↓ε072762↓ε106351↓ε106336β∧THENβεRETURN␈A010116 00011 IF FL<0∨LVER[FL]=L THEN RETURN(0);
␈B↓ε106364↓ε073624↓ε106351ββDIV␈A010124 00012 FLG ← LACT((FL+1) DIV 2);
␈B↓ε106412␈A010126 00013 RET ← 0;
␈B↓ε106377␈A010130 00014 N ← 1;
␈Bβ¬WHILE↓ε106336↓ε072762↓ε106336↓ε106351βαDO␈A010137 00015 WHILE (L←LVER[L])≠FL DO
␈Bβ¬BEGIN
βUNA␈A010137 00016 BEGIN "UNA"
␈BβαIF↓ε073624↓ε106336ββDIVββXOR↓ε106364β∧THEN↓ε106412␈A010150 00017 IF LACT((L+1) DIV 2) XOR FLG THEN RET←-1;
␈B↓ε106377↓ε106377␈A010153 00018 N ← N+1;
␈BββEND∞βUNA␈A010154 00019 END "UNA";
␈BβεRETURNβαIF↓ε106412β∧THEN↓ε106377β∧ELSE␈A010163 00020 RETURN(IF RET THEN N ELSE 0);
␈BββEND ε106336↓L ε106351αFL ε106364βFLG ε106377↓N ε106412βRET∞¬UNTST ε106247αCV␈A010172 00021 END;
010172 00022
␈B¬ε071271βπCOMMENT␈A010172 00023 _ Breaks cv into two cv's, if necessary, and relinks them to seperate
010172 00024 active and inactive lines. New cv contains all inactive lines;
010172 00025
␈BβεSIMPLEβ PROCEDURE↓ε106160α
¬BREAKβπINTEGER↓ε106377α␈A010172 00026 SIMPLE PROCEDURE BREAK(INTEGER CV);
␈Bβ¬BEGIN␈A010172 00027 BEGIN
␈BβπINTEGER↓ε106336α↓ε106323α↓ε106425α↓ε106310α↓ε106453α↓ε106466α␈A010172 00028 INTEGER LN, L, NCV, I, LAD, N;
␈BβαIF↓ε106466↓ε106056↓ε106377β∧THENβεRETURN␈A010177 00029 IF ¬(N←UNTST(CV)) THEN RETURN;
␈B↓ε106323↓ε072617↓ε106377␈A010204 00030 L ← LVERSI[CV];
␈B↓ε106425␈A010206 00031 NCV ← 0;
␈B↓ε106453␈A010210 00032 LAD ← 1;
␈BβαDOβ¬BEGIN
βBRA␈A010210 00033 DO BEGIN "BRA"
␈B↓ε106336↓ε072762↓ε106323␈A010215 00034 LN ← LVER[L];
␈BβαIF↓ε073624↓ε106323ββDIVβ∧THEN␈A010223 00035 IF ¬LACT((L+1) DIV 2) THEN
␈Bβ¬BEGIN
βBRB␈A010223 00036 BEGIN "BRB"
␈B↓ε104604↓ε106323↓ε106377␈A010230 00037 MSCVCO(-L,CV,0);
␈B↓ε104604↓ε106323↓ε106425↓ε106453␈A010235 00038 MSCVCO(L,-NCV,LAD);
␈B↓ε106453↓ε106453␈A010240 00039 LAD ← LAD+1;
␈BβαIF↓ε106453β∧THEN↓ε106425↓ε072571↓ε106323␈A010247 00040 IF LAD=2 THEN NCV←LVERCO[L];
␈BββEND∞βBRB␈A010247 00041 END "BRB";
␈B↓ε106323↓ε106336␈A010251 00042 L ← LN;
␈B↓ε106466↓ε106466␈A010254 00043 N ← N-1;
␈BββEND∞βBRAβ¬UNTIL↓ε106466␈A010255 00044 END "BRA" UNTIL ¬N;
␈BββEND ε106336αLN ε106323↓L ε106425βNCV ε106310↓I ε106453βLAD ε106466↓N∞¬BREAK ε106377αCV␈A010264 00045 END;
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 7-1
MAPS1
␈B¬ε071271βπCOMMENT␈A010264 00046
_ CLUPSC;
␈B¬ε071271βπCOMMENT␈A010264 00002 _ Cleans up the scene after the isolation of a complete or a best partial,
010264 00003 i.e. removes (to LCREDE=3000+CURMAP) all unused lines coinciding with
010264 00004 or contained within any line of the object. Lines of other objects
010264 00005 linked to common cv's are unlinked and given new cv's;
010264 00006
␈BβλINTERNALβ PROCEDURE↓ε106412α
εCLUPSC␈A010271 00007 INTERNAL PROCEDURE CLUPSC;
␈Bβ¬BEGIN
εCLUPSCβπINTEGER↓ε071510π↓ε106364α↓ε106542α↓ε106570α↓ε106351α↓ε106527α↓ε106603α␈A010271 00008 BEGIN "CLUPSC" INTEGER IA,IB,IC,IV1, LV, M;
␈Bβ∧REAL↓ε106631α↓ε106644α↓ε106657α↓ε106672α↓ε106705α↓ε106720α↓ε106733α␈A010271 00009 REAL RL,X1,X2,DIFX,DIFY,Y1,Y2;
␈B¬ε071475β∧SAFEβπINTEGERβ¬ARRAY↓ε106746α↓ε072276␈A010276 00010 SAFEX INTEGER ARRAY MP[1:MAXNOV];
␈Bεε106774εε107022␈A010276 00011 DEFINE BK(CV)="IF ¬MP[CV] THEN BEGIN BREAK(CV);MP[CV]←1;END",
␈Bεε107007␈A010276 00012 RESET="LNCRE1←LNCS1; LNCRE2←LNCS2";
␈B↓ε106746␈A010301 00013 MP[1] ← 0;
␈B↓ε016051↓ε106746↓ε106746↓ε072276␈A010312 00014 ARRBLT(MP[2],MP[1],MAXNOV-1);
␈B↓ε072146↓ε071564␈A010316 00015 N1←2000+2*CURMAP;
␈B↓ε072467↓ε072467␈A010321 00016 RWIC←2.0*RWIC;
␈B↓ε106603↓ε072146␈A010323 00017 M ← N1-1;
␈B¬ε071317ββFOR↓ε106364β∧STEPβ¬UNTIL↓ε072263βαDOβαIF↓ε106603↓ε104734↓ε106364↓ε072146β∧THEN␈A010335 00018 LOOP(IA,1,MAXNOL,1) IF M≤LCRL(IA)≤N1 THEN
␈Bβ¬BEGIN
βCLA␈A010335 00019 BEGIN "CLA"
␈B↓ε072311↓ε072324↓ε072146␈A010341 00020 LNCRE1←(LNCRE2←N1)-1;
␈B↓ε106542↓ε106364␈A010344 00021 IB←2*IA;
␈B↓ε106644↓ε073010↓ε106351↓ε072571↓ε106542␈A010356 00022 X1←XVCOR[IV1←LVERCO[IB-1]];
␈B↓ε106720↓ε073023↓ε106351␈A010363 00023 Y1←YVCOR[IV1];
␈B¬ε106774βαIF↓ε106746↓ε106351β∧THENβ¬BEGIN↓ε106160↓ε106351↓ε106746↓ε106351ββEND␈A010375 00024 BK(IV1);
␈B↓ε106657↓ε073010↓ε106351↓ε072571↓ε106542␈A010406 00025 X2←XVCOR[IV1←LVERCO[IB]];
␈B↓ε106733↓ε073023↓ε106351␈A010413 00026 Y2←YVCOR[IV1];
␈B¬ε106774βαIF↓ε106746↓ε106351β∧THENβ¬BEGIN↓ε106160↓ε106351↓ε106746↓ε106351ββEND␈A010425 00027 BK(IV1);
␈B↓ε104003↓ε106644↓ε106672↓ε072467↓ε106644↓ε106657↓ε106631↓ε073125↓ε106364␈A010441 00028 REKOP(X1+(DIFX←RWIC*(X1-X2)/(RL←RLEN[IA])),
␈B↓ε106720↓ε106705↓ε072467↓ε106720↓ε106733↓ε106631␈A010450 00029 Y1+(DIFY←RWIC*(Y1-Y2)/RL),
␈B↓ε106657↓ε106672␈A010453 00030 X2-DIFX,
␈B↓ε106733↓ε106705␈A010456 00031 Y2-DIFY,
␈B↓ε072467␈A010457 00032 RWIC,
␈B↓ε106631␈A010461 00033 RL);
␈B¬ε107007↓ε072311↓ε071653↓ε072324↓ε071666␈A010465 00034 RESET;
␈B¬ε071317ββFOR↓ε106542β∧STEPβ¬UNTIL↓ε072263βαDOβαIF↓ε072311↓ε072543↓ε106542β∧LAND␈A010473 00035 LOOP(IB,1,MAXNOL,1) IF LNCRE1≤LCREDE[IB] LAND '400000007777
␈B↓ε072324↓ε073652↓ε106364↓ε106542↓ε072502␈A010504 00036 ≤LNCRE2∧ANGLIN(IA,IB)<RMAP
␈B↓ε073357↓ε073010↓ε106351↓ε072571↓ε106570↓ε106542↓ε073023↓ε106351␈A010526 00037 ∧INREK(XVCOR[IV1←LVERCO[(IC←2*IB)-1]],YVCOR[IV1])
␈B↓ε073357↓ε073010↓ε106351↓ε072571↓ε106570↓ε073023↓ε106351␈A010544 00038 ∧INREK(XVCOR[IV1←LVERCO[IC]],YVCOR[IV1])
␈Bβ∧THENβ¬BEGIN
βCLB␈A010545 00039 THEN BEGIN "CLB"
␈B↓ε105331↓ε106542↓ε072311↓ε072324↓ε071564␈A010554 00040 MLCR(IB,LNCRE1←LNCRE2←3000+CURMAP);
␈B¬ε106774βαIF↓ε106746↓ε106351β∧THENβ¬BEGIN↓ε106160↓ε106351↓ε106746↓ε106351ββEND␈A010566 00041 BK(IV1);
␈B↓ε106351↓ε072571↓ε106570␈A010574 00042 IV1←LVERCO[IC-1];
␈B¬ε106774βαIF↓ε106746↓ε106351β∧THENβ¬BEGIN↓ε106160↓ε106351↓ε106746↓ε106351ββEND␈A010605 00043 BK(IV1);
␈B¬ε107007↓ε072311↓ε071653↓ε072324↓ε071666␈A010611 00044 RESET;
␈BββEND∞βCLB␈A010613 00045 END "CLB";
␈BββEND∞βCLA␈A010615 00046 END "CLA";
␈B↓ε072311↓ε072324↓ε072146␈A010621 00047 LNCRE1←(LNCRE2←N1)-1;
␈B¬ε071317ββFOR↓ε106364β∧STEPβ¬UNTIL↓ε072276βαDOβαIF↓ε106746↓ε106364¬ε071447↓ε104502↓ε106364β∧THEN␈A010634 00048 LOOP(IA,1,MAXNOV,1) IF ¬MP[IA]∧BELCRE(IA) THEN
␈B↓ε104174↓ε106364↓ε073010↓ε106364↓ε073023↓ε106364↓ε106631␈A010651 00049 WEIGHV(IA,XVCOR[IA],YVCOR[IA],RL);
␈B¬ε107007↓ε072311↓ε071653↓ε072324↓ε071666␈A010655 00050 RESET;
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 7-2
CLUPSC
␈B↓ε072467↓ε072467␈A010655 00051 RWIC←RWIC/2.0
␈BββEND∞εCLUPSC ε106364αIA ε106542αIB ε106570αIC ε106351βIV1 ε106527αLV ε106603↓M ε106631αRL ε106644αX1 ε106657αX2 ε106672∧DIFX ε106705∧DIFY ε106720αY1 ε106733αY2 ε106746αMPε106774αBKε107007¬RESET∞εCLUPSC␈A010727 00052 END "CLUPSC";
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 8-1
MAPS1
␈B¬ε071271βπCOMMENT␈A010727 00053
_ FUSABL;
010727 00002
␈B¬ε071271βπCOMMENT␈A010727 00003 _ Returns -1 (else 0) iff L2>0 and lines of s.v:s V1 and V2 are collinear.
010727 00004 If L2≤0, we check whether line of s.v. L1 may be extended through V1
010727 00005 (if L2=0) or V2 (if L2=-1).;
010727 00006
␈BβλINTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε106453α
εFUSABLβπINTEGER↓ε107050α↓ε106774α↓ε107035α↓ε106746α␈A010727 00007 INTERNAL SIMPLE INTEGER PROCEDURE FUSABL(INTEGER L1,L2,V1,V2);
␈Bβ¬BEGIN
εFUSABL␈A010727 00008 BEGIN "FUSABL"
␈BβπINTEGER↓ε106705α␈A010727 00009 INTEGER IL1;
␈B↓ε106705↓ε107050␈A010733 00010 IL1←(L1+1)%2;
␈B¬ε071421βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105023¬ε070401↓ε015167↓ε107050¬ε070401↓ε015167↓ε106774¬ε070401↓ε015167↓ε107035¬ε070401↓ε015167↓ε106746␈A010770 00011 DTRC("FUSABL: "QC(L1)QC(L2)QC(V1)QC(V2));
␈BβαIF↓ε106774ββABS↓ε072604↓ε107035↓ε106746ββABS↓ε072604↓ε106746↓ε107035β∧THENβεRETURN␈A011010 00012 IF L2>0∧(ABS LINK[V1]=V2 ∨ ABS LINK[V2]=V1) THEN RETURN(-1);
␈BβαIF↓ε106774β∧THEN␈A011012 00013 IF L2≤0 THEN
␈BβεRETURNββABS↓ε073064↓ε106705␈A011015 00014 RETURN(ABS(CXL[IL1]
␈B↓ε073010↓ε072146β∧CASE↓ε106774βαOF↓ε107035↓ε106746␈A011035 00015 *XVCOR[N1←CASE -L2 OF(V1,V2)]
␈B↓ε073077↓ε106705␈A011042 00016 +CYL[IL1]
␈B↓ε073023↓ε072146␈A011045 00017 *YVCOR[N1]
␈B↓ε073112↓ε106705␈A011054 00018 +CCL[IL1])
␈B↓ε072467␈A011055 00019 ≤RWIC
␈B↓ε073767↓ε073010↓ε072146↓ε073036↓ε107050↓ε073023↓ε072146↓ε073051↓ε107050␈A011101 00020 *SQRT((XVCOR[N1]-XLCOR[L1])↑2+(YVCOR[N1]-YLCOR[L1])↑2)
␈B↓ε073125↓ε106705␈A011114 00021 /RLEN[IL1]);
␈BβεRETURN↓ε103727↓ε073036↓ε107035␈A011117 00022 RETURN(KARN(XLCOR[V1]
␈B↓ε073051↓ε107035␈A011123 00023 ,YLCOR[V1]
␈B↓ε073036↓ε106705↓ε073713↓ε107035␈A011132 00024 ,XLCOR[IL1←LVOPP(V1)]
␈B↓ε073051↓ε106705␈A011136 00025 ,YLCOR[IL1]
␈B↓ε073036↓ε106746␈A011141 00026 ,XLCOR[V2]
␈B↓ε073051↓ε106746␈A011144 00027 ,YLCOR[V2]
␈B↓ε073036↓ε106705↓ε073713↓ε106746␈A011153 00028 ,XLCOR[IL1←LVOPP(V2)]
␈B↓ε073051↓ε106705␈A011170 00029 ,YLCOR[IL1],-1)=1)
␈BββEND∞εFUSABL ε106705βIL1∞εFUSABL ε107050αL1 ε106774αL2 ε107035αV1 ε106746αV2␈A011174 00030 END "FUSABL";
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 9-1
MAPS1
␈B¬ε071271βπCOMMENT␈A011174 00031
_ LFDIF;
011174 00002
␈B¬ε071271βπCOMMENT␈A011174 00003 _ Returns encoded actions to be performed at end ND2 of LF2 in order to
011174 00004 make it similar to end ND1 of LF1. Other ends must agree (otherwise
011174 00005 error-return = '400). The program also sets the sequential modification
011174 00006 word (MODIF). MODIF contains two bits for each line-position at ND2 of
011174 00007 LF2, telling what to do at that position:
011174 00008 {(0 = no change)(1 = insert line here)(2 = delete line here)
011174 00009 (3 unused code)}.
011174 00010 MODIF←-1 if there is no unambiguous modification possible.
011174 00011 MODIF has its high bit turned on iff end single before insertions.
011174 00012 The program pays no attention to the outer angle at ND2 of LF2.;
011174 00013
␈BβλINTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε107007α
¬LFDIFβπINTEGER↓ε106733α↓ε106657α↓ε106542α↓ε106570α␈A011174 00014 INTERNAL SIMPLE INTEGER PROCEDURE LFDIF(INTEGER LF1,LF2,ND1,ND2);
␈Bβ¬BEGIN
¬LFDIF␈A011174 00015 BEGIN "LFDIF"
␈BβπINTEGER↓ε107111α↓ε107302α↓ε072146π↓ε107076α↓ε072161π↓ε107124α↓ε107226α↓ε107200α↓ε071510π↓ε107254α↓ε107152α↓ε107315α↓ε107267α↓ε107330α↓ε107343α↓ε107356α↓ε107371α↓ε107404α␈A011174 00016 INTEGER C1,C2,N1,N2,NLDIF,PAR,IA,IB,DEL,CH,IRET,INS,D1,D2,IPD,
␈B↓ε107417α↓ε107432α↓ε107445α↓ε107460α↓ε107473α↓ε107506α↓ε107521α↓ε107534α␈A011174 00017 DS1,DS2,CHAR,POS1,POS2,INSTOT,NTOT,BARAM;
011174 00018
␈B¬ε071271βπCOMMENT␈A011174 00019 _ DN is displacement for other ends. DSN originally points to
011174 00020 "#lines>180", later to "#lines≤180". CN = constellation bits.
011174 00021 CH=INS∨DEL all refer to first or last line respectively.;
011174 00022
␈Bβ¬LABEL↓ε107547α␈A011174 00023 LABEL OU;
␈B↓ε107417↓ε107356↓ε106542␈A011201 00024 DS1←31-(D1←18*ND1);
␈B↓ε107432↓ε107371↓ε106570␈A011206 00025 DS2←31-(D2←18*ND2);
␈B↓ε072031↓ε107330↓ε107506↓ε107521↓ε107534␈A011214 00026 MDCTR←IRET←INSTOT←NTOT←BARAM←0;
␈B↓ε072352␈A011216 00027 MODIF←2;
␈B↓ε071701↓ε073214↓ε106733↓ε107417↓ε107417␈A011225 00028 RAYS←BITS(LF1,DS1,DS1+3);
␈BβαIF↓ε106733ββLSH↓ε107356ββXOR↓ε106657ββLSH↓ε107371β∧LANDβ∧THEN␈A011236 00029 IF ((LF1 LSH (-D1)) XOR (LF2 LSH (-D2))) LAND '367500 THEN
␈Bβ¬BEGIN↓ε072352↓ε107330βαGO↓ε107547ββEND␈A011243 00030 BEGIN MODIF←-1; IRET←'400; GO OU END;
011243 00031
␈B¬ε071271βπCOMMENT␈A011243 00032 _ The other ends are in agreement.;
011243 00033
␈B¬ε071317ββFOR↓ε107254β∧STEPβ¬UNTILβαDO␈A011247 00034 LOOP(IA,1,2,1)
␈Bβ¬BEGIN␈A011247 00035 BEGIN
␈B↓ε107111↓ε073214↓ε106733↓ε107356↓ε107356␈A011260 00036 C1←BITS(LF1,3+D1,4+D1);
␈B↓ε107302↓ε073214↓ε106657↓ε107371↓ε107371␈A011271 00037 C2←BITS(LF2,3+D2,4+D2);
␈B↓ε107343↓ε107302↓ε107111β∧LAND↓ε107302↓ε107111␈A011305 00038 INS←(C2=2∧(C1 LAND 1)∨C2∧¬C1);
␈B↓ε107267↓ε107315↓ε107111↓ε107302↓ε107111↓ε107302β∧LAND↓ε107343␈A011330 00039 CH←-((DEL←C1∧¬C2∨C1=2∧(C2 LAND 1))∨INS);
␈B↓ε107200↓ε107111β∧LAND␈A011333 00040 PAR←C1 LAND 1;
␈B↓ε107404↓ε107343↓ε107200↓ε107315␈A011344 00041 IPD←INS∨PAR∧¬DEL;
␈B↓ε107330↓ε107330ββLSHββLOR↓ε107267ββLSHββLOR↓ε107315ββLSHββLOR↓ε107200␈A011355 00042 IRET←((IRET LSH 1 LOR CH) LSH 1 LOR (-DEL)) LSH 1 LOR PAR;
␈B↓ε107226↓ε107076↓ε073214↓ε106733↓ε107417↓ε107417␈A011364 00043 NLDIF←(N1←BITS(LF1,DS1,DS1+3))-
␈B↓ε107124↓ε073214↓ε106657↓ε107432↓ε107432↓ε107343↓ε107315␈A011400 00044 (N2←BITS(LF2,DS2,DS2+3))+INS-DEL;
␈B↓ε107330↓ε107330ββLSHββLOR↓ε107226␈A011410 00045 IRET←( ( ( (IRET LSH 1 LOR(-(NLDIF<0)))
␈BββLSHββLORββABS↓ε107226␈A011413 00046 LSH 4 LOR ABS NLDIF)
␈BββLSHββLOR↓ε107460βαIF↓ε107254β∧THENβ∧ELSE␈A011422 00047 LSH 4 LOR (POS1←IF IA=2 THEN 1 ELSE
␈BβαIF↓ε107404β∧THENβ∧ELSE␈A011432 00048 IF IPD THEN 2 ELSE 1))
␈BββLSHββLOR↓ε107473βαIF↓ε107226β∧THEN↓ε107076β∧ELSE↓ε107124↓ε107343↓ε107315␈A011444 00049 LSH 4 LOR (POS2←(IF NLDIF≥0 THEN N1 ELSE N2-INS+DEL)
␈B↓ε107254↓ε107404␈A011457 00050 +(IA=2∧IPD)))
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 9-2
LFDIF
␈BββLSHββLOR↓ε107445βαIF↓ε107267↓ε107226β∧THEN↓ε107076β∧ELSE␈A011473 00051 LSH 2 LOR (CHAR←IF ¬CH∧¬NLDIF THEN -(N1>0) ELSE
␈BβαIF↓ε107226β∧THENβ∧ELSE␈A011477 00052 IF ¬NLDIF THEN 2 ELSE
␈BβαIFββABS↓ε107226↓ε107473↓ε107460β∧THENβ∧ELSE␈A011507 00053 IF ABS NLDIF=POS2-POS1+1 THEN 2 ELSE
␈B↓ε107534␈A011520 00054 (BARAM←2)+1);
␈BβαIF↓ε107445β∧THEN↓ε072352↓ε072352ββLSH↓ε107076β∧ELSE␈A011532 00055 IF CHAR<2 THEN MODIF←MODIF LSH (2*N1) ELSE
␈Bβ¬BEGIN␈A011532 00056 BEGIN
␈BβαIF↓ε107254↓ε107267↓ε107200β∧THEN␈A011541 00057 IF IA=1∧(CH∨PAR) THEN
␈B↓ε072352↓ε072352ββLSHββLOR↓ε107343↓ε107315␈A011551 00058 MODIF←MODIF LSH 2 LOR (-INS-2*DEL);
␈B↓ε107124βαIF↓ε107226β∧THEN↓ε107124↓ε107315↓ε107200↓ε107343β∧ELSE↓ε107076↓ε107404␈A011571 00059 N2←IF NLDIF<0 THEN N2+(DEL∨PAR∧¬INS) ELSE N1+IPD;
␈B¬ε071317ββFOR↓ε107152β∧STEPβ¬UNTIL↓ε107124βαDO␈A011575 00060 LOOP(IB,1,N2,1)
␈B↓ε072352↓ε072352ββLSHββLOR␈A011577 00061 MODIF←MODIF LSH 2 LOR
␈BβαIF↓ε107445β∧THENβ∧ELSE␈A011605 00062 (IF CHAR=3 THEN 3 ELSE
␈BβαIF↓ε107226β∧THENβ∧ELSE␈A011611 00063 IF NLDIF>0 THEN 1 ELSE
␈BβαIF↓ε107226β∧THENβ∧ELSE␈A011624 00064 IF ¬NLDIF THEN 0 ELSE 2);
␈BβαIF↓ε107254↓ε107267↓ε107200β∧THEN␈A011633 00065 IF IA=2∧(CH∨PAR) THEN
␈B↓ε072352↓ε072352ββLSHββLOR↓ε107343↓ε107315␈A011641 00066 MODIF←MODIF LSH 2 LOR (-INS-2*DEL)
␈BββEND␈A011643 00067 END;
␈B↓ε107356↓ε107356␈A011646 00068 D1←18-D1;
␈B↓ε107371↓ε107371␈A011651 00069 D2←18-D2;
␈B↓ε107417↓ε107417␈A011654 00070 DS1←DS1-5;
␈B↓ε107432↓ε107432␈A011657 00071 DS2←DS2-5;
␈B↓ε107506↓ε107506↓ε107343ββMAX↓ε107226␈A011666 00072 INSTOT←INSTOT-INS+(0 MAX NLDIF);
␈B↓ε107521↓ε107521↓ε107076␈A011666 00073 NTOT←NTOT+N1
␈BββEND␈A011673 00074 END;
␈Bβ
START.CODEβ¬LABEL↓ε107725α↓ε107651α␈A011673 00075 START_CODE LABEL L1, L2;
␈B↓ε072352␈A011674 00076 SKIPG 1,MODIF;
␈B↓ε107651␈A011675 00077 JRST L2;
␈B↓ε072031␈A011676 00078 MOVE 2,MDCTR;
␈B↓ε107725ββLSH␈A011677 00079 L1: LSH 1,2;
011700 00080 ADDI 2,2;
␈B↓ε107725␈A011701 00081 JUMPG 1,L1;
␈B↓ε072031␈A011702 00082 MOVEM 2,MDCTR;
␈B↓ε072352␈A011703 00083 MOVEM 1,MODIF;
␈B↓ε107651ββEND␈A011703 00084 L2: END;
011703 00085
␈B↓ε072352↓ε072352β∧LANDββLOR↓ε107534↓ε107506↓ε107521ββLSH␈A011720 00086 MODIF←(MODIF LAND '177777777777) LOR ((BARAM-(INSTOT=NTOT)) LSH 34);
␈B↓ε107547¬ε071421βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105023¬ε070414↓ε015322↓ε106733¬ε070414↓ε015322↓ε106657¬ε070401↓ε015167↓ε106542¬ε070401↓ε015167↓ε106570¬ε070414↓ε015322↓ε107330¬ε070414↓ε015322↓ε072352␈A011771 00087 OU: DTRC("LFDIF: "QCO(LF1)QCO(LF2)QC(ND1)QC(ND2)QCO(IRET)QCO(MODIF));
␈BβεRETURN↓ε107330␈A011773 00088 RETURN(IRET)
␈BββEND∞¬LFDIF ε107111αC1 ε107302αC2 ε107076αN1 ε107124αN2 ε107226¬NLDIF ε107200βPAR ε107254αIA ε107152αIB ε107315βDEL ε107267αCH ε107330∧IRET ε107343βINS ε107356αD1 ε107371αD2 ε107404βIPD ε107417βDS1 ε107432βDS2 ε107445∧CHAR ε107460∧POS1 ε107473∧POS2 ε107506εINSTOT ε107521∧NTOT ε107534¬BARAM ε107547αOU ε107725αL1 ε107651αL2∞¬LFDIF ε106733βLF1 ε106657βLF2 ε106542βND1 ε106570βND2␈A012026 00089 END "LFDIF";
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 10-1
MAPS1
␈B¬ε071271βπCOMMENT␈A012026 00090
_ MAP (VCRKEY);
012026 00002
␈B¬ε071271βπCOMMENT␈A012026 00003 _ Sets up the expanded parallel datastructure for prototype PROT.
012026 00004 Then initializes mapping arrays according to the basic mapping
012026 00005 provided by the key feature FEAT (c.f. or l.f.) from the scene
012026 00006 into the prototype. Then calls MAPREC to complete the mapping,
012026 00007 described in PLMAP (scene-line corresponding to prot.-line)
012026 00008 and in PVMAP (scene-vertex corresponding to prot.-vertex).;
012026 00009
␈BβλINTERNALβπINTEGERβ PROCEDURE↓ε106705α
βMAPβπINTEGER↓ε107547α↓ε107534α↓ε107521α␈A012033 00010 INTERNAL INTEGER PROCEDURE MAP(INTEGER LSC,LPR,DIR);
␈Bβ¬BEGIN
βMAP␈A012033 00011 BEGIN "MAP"
␈BβπINTEGER↓ε071510π↓ε107445α↓ε107432α↓ε107417α↓ε107404α␈A012033 00012 INTEGER IA,PLNE,SHFT,IB;
␈Bβ∧SAFEβλINTERNALβπINTEGERβ¬ARRAY↓ε107371α↓ε107356α↓ε107343α↓ε107330α↓ε107267α↓ε071612␈A012056 00013 SAFE INTERNAL INTEGER ARRAY LENDV,LENDP,LLEV,LLEVO,PLMAPO[1:PLIN,0:1],
␈B↓ε107124α↓ε107076α↓ε107302α↓ε107111α↓ε106323α↓ε071612↓ε110116α↓ε071625␈A012104 00014 MAPORD,PARCLA,LENCAT,INSLEV,LFTSTL[1:PLIN],VLEV[1:PVER];
␈Bβ∧SAFEβλEXTERNALβπINTEGERβ¬ARRAY↓ε111055α↓ε111070α↓ε111103α␈A012104 00015 SAFE EXTERNAL INTEGER ARRAY PLMAP[1:1,0:1],FLMAPS,PVMAP[1:1],
␈B↓ε111116α␈A012104 00016 PARTS[0:1,1:63];
012104 00017
␈B¬ε071271βπCOMMENT␈A012104 00018 _ Returns 1 (else 0) iff present key is unexplored (virgin).;
012104 00019
␈BβεSIMPLEβπINTEGERβ PROCEDURE↓ε111144α↓ε111157α
εVIRKEY␈A012105 00020 SIMPLE INTEGER PROCEDURE VIRKEY;
␈Bβ¬BEGIN
εVIRKEY␈A012105 00021 BEGIN "VIRKEY"
␈BβπINTEGER↓ε107445π↓ε111261α↓ε107404π↓ε111274α␈A012105 00022 INTEGER IA,IB;
␈B↓ε111274↓ε107547ββLSHββLOR↓ε071577ββLSHββLOR↓ε107534ββLSHββLOR↓ε107521␈A012115 00023 IB←((LSC LSH 12 LOR PROT) LSH 12 LOR LPR) LSH 1 LOR DIR;
␈BβαIF↓ε072072β∧THEN¬ε071317ββFOR↓ε111261β∧STEPβ¬UNTIL↓ε072057βαDO␈A012123 00024 IF FTSW THEN LOOP(IA,1,FLMIND,1)
␈BβαIF↓ε111070↓ε111261↓ε111274β∧THENβεRETURNβ∧ELSE␈A012133 00025 IF FLMAPS[IA]=IB THEN RETURN(0) ELSE
␈Bβ∧ELSE↓ε111070↓ε072057↓ε072057↓ε111274␈A012145 00026 ELSE FLMAPS[FLMIND←FLMIND+1]←IB;
␈BβεRETURN␈A012147 00027 RETURN(1)
␈BββEND∞εVIRKEY ε111261αIA ε111274αIB∞εVIRKEY␈A012152 00028 END "VIRKEY";
012152 00029
␈B¬ε071345βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105153¬ε070544↓ε015167↓ε071577↓ε015167↓ε107534↓ε015167↓ε107547␈A012200 00030 QTRC(CL&"PROT= "&CVS(PROT)&" LPR= "&CVS(LPR)&" LSC= "&CVS(LSC)&
␈B↓ε015322↓ε107521¬ε070544␈A012213 00031 " DIR= "&CVOS(DIR)&CL);
␈B↓ε072105↓ε107521ββLSHβ∧LANDββXOR↓ε107521↓ε107521β∧LAND␈A012223 00032 LFDBT←(DIR LSH -1) LAND 1 XOR (DIR←DIR LAND 1);
␈BβαIF↓ε073624↓ε107547↓ε111157β∧THEN␈A012230 00033 IF ¬LACT(LSC)∨¬VIRKEY THEN
␈Bβ¬BEGIN␈A012230 00034 BEGIN
␈B¬ε071345βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105153¬ε070544¬ε070544␈A012240 00035 QTRC(CL&"Key not virgin"&CL);
␈BβεRETURN␈A012244 00036 RETURN(-1)
␈BββEND␈A012244 00037 END;
␈BβαIF↓ε072426β∧LANDβ∧THEN␈A012247 00038 IF MAPTRC LAND '20000 THEN
␈Bβ¬BEGIN␈A012247 00039 BEGIN
␈B↓ε016437␈A012252 00040 OUTSTR("NEW KEY - MAPTRC? ");
␈BβαIF↓ε016235β∧THEN↓ε072426↓ε073270↓ε016315␈A012261 00041 IF INCHRW="←" THEN MAPTRC←MAPCONV(INSTR(":"));
␈B↓ε016437¬ε070544␈A012264 00042 OUTSTR(CL)
␈BββEND␈A012264 00043 END;
012264 00044
␈B¬ε071271βπCOMMENT␈A012264 00045 _ First set up expanded prototype datastructure,
012264 00046 and zero line-mapping arrays.;
012264 00047
␈B¬ε071317ββFOR↓ε107445β∧STEPβ¬UNTIL↓ε071612βαDO␈A012270 00048 LOOP(IA,1,PLIN,1)
␈Bβ¬BEGIN␈A012270 00049 BEGIN
␈B↓ε107076↓ε107445↓ε107432↓ε072673↓ε071640↓ε107445β∧LAND␈A012301 00050 PARCLA[IA]←(PLNE←PLINE[AD0+IA]) LAND '37;
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 10-2
MAP
␈B↓ε107302↓ε107445↓ε072706↓ε071640↓ε107445ββLSHβ∧LAND␈A012313 00051 LENCAT[IA]←PLINE2[AD0+IA] LSH -9 LAND 1;
␈B¬ε071317ββFOR↓ε107404β∧STEPβ¬UNTILβαDO␈A012317 00052 LOOP(IB,0,1,1)
␈Bβ¬BEGIN␈A012317 00053 BEGIN
␈B↓ε111055↓ε107445↓ε107404↓ε107343↓ε107445↓ε107404␈A012334 00054 PLMAP[IA,IB]←LLEV[IA,IB]←0;
␈B↓ε107371↓ε107445↓ε107404↓ε073214↓ε107432↓ε107417↓ε107404↓ε107417␈A012355 00055 LENDV[IA,IB]←BITS(PLNE,30-(SHFT←6*IB),35-SHFT);
␈B↓ε107356↓ε107445↓ε107404↓ε073214↓ε107432↓ε107417↓ε107417␈A012372 00056 LENDP[IA,IB]←BITS(PLNE,18-SHFT,23-SHFT)
␈BββEND␈A012374 00057 END
␈BββEND␈A012400 00058 END;
␈B¬ε071317ββFOR↓ε107445β∧STEPβ¬UNTIL↓ε071625βαDO↓ε111103↓ε107445↓ε110116↓ε107445␈A012416 00059 LOOP(IA,1,PVER,1) PVMAP[IA]←VLEV[IA]←0;
012416 00060
␈B¬ε071271βπCOMMENT␈A012416 00061 _ Initialize the mapping (1 line) and call on MAPREC to do the job.;
012416 00062
␈B↓ε107124↓ε107534␈A012421 00063 MAPORD[1]←LPR;
␈B↓ε105331↓ε107547␈A012424 00064 MLCR(LSC,1001);
␈B↓ε111055↓ε107534↓ε072105↓ε107547↓ε107521ββXOR↓ε072105␈A012441 00065 PLMAP[LPR,1-LFDBT]←2*LSC-(DIR XOR LFDBT);
␈B↓ε107343↓ε107534↓ε072105␈A012451 00066 LLEV[LPR,1-LFDBT]←1;
␈B↓ε111116↓ε071727↓ε071577↓ε072003␈A012461 00067 PARTS[CMPIND,0]←PROT; KMP←1;
␈BβεRETURN↓ε104324␈A012465 00068 RETURN(MAPREC)
␈BββEND∞βMAP ε107445αIA ε107432∧PLNE ε107417∧SHFT ε107404αIB ε107371¬LENDV ε107356¬LENDP ε107343∧LLEV ε107330¬LLEVO ε107267εPLMAPO ε107124εMAPORD ε107076εPARCLA ε107302εLENCAT ε107111εINSLEV ε106323εLFTSTL ε110116∧VLEV ε111055¬PLMAP ε111070εFLMAPS ε111103¬PVMAP ε111116¬PARTS ε111144εKLST.. ε111157εVIRKEY∞βMAP ε107547βLSC ε107534βLPR ε107521βDIR␈A012550 00069 END "MAP";
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 11-1
MAPS1
␈B¬ε071271βπCOMMENT␈A012550 00070
_ PARSE;
012550 00002
012550 00003
␈B¬ε071271βπCOMMENT␈A012550 00004 _ Will attempt to find a satisfactory parsing of the scene. Note that the
012550 00005 PARTS-storage implementation limits the number of lines to 511.;
012550 00006
␈BβλINTERNALβ PROCEDURE↓ε107725α
¬PARSE␈A012555 00007 INTERNAL PROCEDURE PARSE;
␈Bβ¬BEGIN
¬PARSE␈A012555 00008 BEGIN "PARSE"
␈Bβ¬LABEL↓ε111055α↓ε110116α↓ε107766α↓ε106323α↓ε107677α␈A012555 00009 LABEL ITER,REP,REV,ISO,BA1;
␈Bβ∧SAFEβλINTERNALβπINTEGERβ¬ARRAY↓ε107111α↓ε072400↓ε107302α↓ε072413␈A012571 00010 SAFE INTERNAL INTEGER ARRAY PLMAP[1:MAXPLS,0:1],PVMAP[1:MAXPVS],
␈B↓ε107076α↓ε072400↓ε107124α↓ε072276␈A012610 00011 PARTS[1:63,0:1+MAXPLS%3],FLMAPS[1:MAXNOV];
␈BβπINTEGER↓ε107267α↓ε071510π↓ε107315α↓ε107330α↓ε107152α↓ε107343α↓ε107254α↓ε107356α↓ε107200α↓ε107371α↓ε107226α↓ε107404α␈A012610 00012 INTEGER MAXCOM,IA,IB,KADR,PFP,CFP,PRP,SCL1,SCL2,PRL1,PRL2,
␈B↓ε107417α↓ε107432α↓ε107445α↓ε107473α↓ε111465α↓ε111513α↓ε111376α␈A012610 00013 LB,UB,FTI,UBI,DIR,IBB,ICC,
␈B↓ε111424α↓ε111526α↓ε111541α↓ε111554α↓ε111567α↓ε111602α↓ε111615α↓ε111630α↓ε111643α↓ε111656α␈A012610 00014 ORD,SUCC,IC,ID,MXMXCM,I1,I2,I3,REVER,PARTSI;
012610 00015
012610 00016
␈B¬ε071271βπCOMMENT␈A012610 00017 _ Returns s.v.-entry in PARTS, corresponding
012610 00018 to prototype line L of mapping M.;
012610 00019
␈BβλINTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε111671α↓ε111704α
εLPARTSβπINTEGER↓ε111745α↓ε111760α␈A012611 00020 INTERNAL SIMPLE INTEGER PROCEDURE LPARTS(INTEGER M,L);
␈BβεRETURN↓ε073214↓ε107076↓ε111745↓ε111513↓ε111760↓ε111376↓ε111513↓ε111760↓ε111376∞εLPARTS ε111745↓M ε111760↓L␈A012636 00021 RETURN(BITS(PARTS[M,IBB←(L+2)%3],ICC←12*(3*IBB-L),ICC+11));
012636 00022
␈B¬ε071271βπCOMMENT␈A012636 00023 _ Returns line indicated in LPARTS(M,L), 0 iff no line specified.;
012636 00024
␈BβλINTERNALβεSIMPLEβπINTEGERβ PROCEDURE↓ε111732α
εLPARTLβπINTEGER↓ε112034α↓ε112047α␈A012636 00025 INTERNAL SIMPLE INTEGER PROCEDURE LPARTL(INTEGER M,L);
␈BβεRETURNβαIF↓ε111513↓ε111704↓ε112034↓ε112047β∧LANDβ∧THEN↓ε111513␈A012645 00026 RETURN(((IF (IBB←LPARTS(M,L) LAND '1777)≠'1777 THEN IBB
␈Bβ∧ELSE∞εLPARTL ε112034↓M ε112047↓L␈A012656 00027 ELSE 0)+1)%2);
012656 00028
␈B↓ε072222↓ε071653↓ε072311␈A012661 00029 LNCRE0←LNCS1←LNCRE1;
␈B↓ε071666↓ε072324␈A012663 00030 LNCS2←LNCRE2;
␈BβαIF↓ε072426β∧THEN␈A012666 00031 IF MAPTRC=-1 THEN
␈Bβ¬BEGIN␈A012666 00032 BEGIN
␈B↓ε072426␈A012670 00033 MAPTRC←0;
␈B¬ε071317ββFOR↓ε107315β∧STEPβ¬UNTIL↓ε072263βαDO␈A012674 00034 LOOP(IA,1,MAXNOL,1)
␈Bβ¬BEGIN␈A012674 00035 BEGIN
␈Bβ¬WHILE↓ε107330↓ε104734↓ε107315βαDO↓ε105550↓ε107315␈A012704 00036 WHILE (IB←LCRL(IA))>2000 DO REVIVE(IA);
␈BβαIF↓ε107330β∧THEN↓ε105550↓ε107315β∧ELSE␈A012712 00037 IF IB=1001 THEN REVIVE(IA) ELSE
␈BβαIF↓ε107330↓ε107330β∧THEN↓ε105112↓ε107315␈A012723 00038 IF IB≥1002∧IB≤1005 THEN LINDL(IA,0)
␈BββEND␈A012725 00039 END;
␈B↓ε073563␈A012726 00040 UNXREF;
␈B↓ε105726␈A012730 00041 UPPDAL(0);
␈BβεRETURN␈A012730 00042 RETURN
␈BββEND␈A012733 00043 END;
␈B↓ε071770↓ε072426β∧LAND␈A012736 00044 DTRACE←MAPTRC LAND '10000;
␈B↓ε071551↓ε072133␈A012741 00045 DCHAN←NPRS←-1;
␈B¬ε071345βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105153¬ε070544¬ε070544␈A012750 00046 QTRC(CL&"PARSER RESULTS:"&CL);
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 12-1
PARSE
␈B¬ε071271βπCOMMENT␈A012750 00047
_ PARSE cont;
012750 00002
␈B¬ε071271βπCOMMENT␈A012750 00003 _ Initialize PFPTR.;
012750 00004
␈B↓ε072174↓ε072207↓ε071564␈A012754 00005 TC←TCS←CURMAP←0;
␈B↓ε111656↓ε072400␈A012760 00006 PARTSI←1+MAXPLS%3;
␈B↓ε110116↓ε107417↓ε072365␈A012763 00007 REP: LB←PLFTOT+1;
␈B↓ε107432↓ε072337␈A012765 00008 UB←PFTOT;
␈B↓ε107473␈A012767 00009 UBI←1;
␈B↓ε072072↓ε072057␈A012772 00010 FTSW←FLMIND←0;
␈B¬ε071345βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105153¬ε070544␈A013002 00011 QTRC("CF-keys"&CL);
␈B↓ε073522␈A013004 00012 XREFC(0);
␈B↓ε073474␈A013005 00013 FTEX;
013005 00014
␈B¬ε071271βπCOMMENT␈A013005 00015 _ Display scene?;
013005 00016
␈BβαIF↓ε072426β∧LANDβ∧THEN␈A013010 00017 IF MAPTRC LAND '1000000 THEN
␈Bβ¬BEGIN␈A013010 00018 BEGIN
␈B↓ε016437¬ε070544␈A013013 00019 OUTSTR(CL&"SCENE");
␈B↓ε105726↓ε072426β∧LAND␈A013017 00020 UPPDAL(MAPTRC LAND '2000000)
␈BββEND␈A013017 00021 END;
␈B¬ε071317ββFOR↓ε107315β∧STEPβ¬UNTIL↓ε072337βαDO↓ε072734↓ε107315↓ε072734↓ε107315β∧LAND␈A013034 00022 LOOP(IA,1,PFTOT,1) PFPTR[IA]←PFPTR[IA] LAND '377777777777;
013034 00023
␈B¬ε071271βπCOMMENT␈A013034 00024 _ Find un-exhausted key of maximum complexity.;
013034 00025
␈B↓ε111567↓ε072120␈A013037 00026 MXMXCM←BESTMP←0;
␈B↓ε071727↓ε071564↓ε071564␈A013044 00027 CMPIND←(CURMAP←CURMAP+1)+1;
␈B↓ε107076↓ε071727␈A013052 00028 PARTS[CMPIND,0]←1;
␈B¬ε071317ββFOR↓ε107315β∧STEPβ¬UNTIL↓ε072276βαDO↓ε107124↓ε107315␈A013063 00029 LOOP(IA,1,MAXNOV,1) FLMAPS[IA]←0;
␈B↓ε111055↓ε107267↓ε072003↓ε111526␈A013067 00030 ITER: MAXCOM←KMP←SUCC←0;
␈B¬ε071317ββFOR↓ε107315↓ε107432β∧STEPβ¬UNTIL↓ε107417βαDOβαIF↓ε107267↓ε072734↓ε107315β∧THEN␈A013100 00031 LOOP(IA,UB,LB,-1) IF MAXCOM<PFPTR[IA] THEN
␈BβαIF↓ε107267↓ε072734↓ε107152↓ε107315↓ε111567β∧THENβ∧DONE␈A013114 00032 IF(MAXCOM←PFPTR[KADR←IA])=MXMXCM THEN DONE;
␈BβαIF↓ε107267β∧THENβαGO↓ε106323␈A013117 00033 IF ¬MAXCOM THEN GO ISO;
␈B↓ε111567↓ε107267␈A013121 00034 MXMXCM←MAXCOM;
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 13-1
PARSE
␈B¬ε071271βπCOMMENT␈A013121 00035
_ PARSE cont;
013121 00002
␈B¬ε071271βπCOMMENT␈A013121 00003 _ Now exhaust the mappings where this feature serves as the key.;
013121 00004
␈B↓ε107254↓ε073214↓ε111541↓ε072734↓ε107152␈A013133 00005 CFP←BITS(IC←PFPTR[KADR],12,23);
␈B↓ε111424↓ε111541β∧LAND␈A013136 00006 ORD←IC LAND '4000000000;
␈B¬ε071421βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105023¬ε070401↓ε015167↓ε107152¬ε070401↓ε015167↓ε107254¬ε070401↓ε015167↓ε111424␈A013165 00007 DTRC(" "QC(KADR)QC(CFP)QC(ORD));
␈B¬ε071317ββFOR↓ε107445β∧STEPβ¬UNTIL↓ε107473βαDOβαIF↓ε072072↓ε072311↓ε072543↓ε107445β∧LAND␈A013176 00008 LOOP(FTI,1,UBI,1) IF ¬FTSW∨LNCRE1≤LCREDE[FTI] LAND '400000007777
␈B↓ε072324↓ε107330↓ε072556↓ε107445␈A013212 00009 ≤LNCRE2∧((IB←LFEAT[FTI])<0∧
␈B↓ε072072↓ε107330↓ε072072↓ε107152↓ε107330β∧LANDβ∧THEN␈A013226 00010 FTSW=2∨IB>0∧FTSW=1)∧KADR=IB LAND '7777 THEN
␈Bβ¬WHILE↓ε107254↓ε107254↓ε072072βαDO␈A013232 00011 WHILE (CFP←CFP+FTSW) DO
␈Bβ¬BEGIN
∧CFPL␈A013232 00012 BEGIN "CFPL"
␈B↓ε107200βαIF↓ε072072β∧THEN↓ε107445β∧ELSE↓ε073214↓ε111541↓ε072775↓ε107254␈A013251 00013 SCL1←IF FTSW THEN FTI ELSE BITS(IC←CFEAT[CFP],24,34);
␈BβαIF↓ε072072β∧THEN↓ε107371↓ε073214↓ε111541␈A013260 00014 IF ¬FTSW THEN SCL2←BITS(IC,12,22);
␈B↓ε107356↓ε072734↓ε107152β∧LAND␈A013266 00015 PRP←PFPTR[KADR] LAND '7777;
␈Bβ¬WHILE↓ε107356βαDO␈A013270 00016 WHILE PRP DO
␈Bβ¬BEGIN
∧PRPL␈A013270 00017 BEGIN "PRPL"
␈B↓ε071577↓ε073214↓ε072721↓ε107356␈A013300 00018 PROT←BITS(PFPRO[PRP],24,35);
␈B↓ε071640↓ε072660↓ε071577␈A013306 00019 AD0←PPTRL[PROT]-1;
␈B↓ε071612↓ε072632↓ε071577␈A013313 00020 PLIN←PLINES[PROT];
␈B↓ε071625↓ε072645↓ε071577␈A013320 00021 PVER←PVERTS[PROT];
␈B↓ε107343↓ε073214↓ε072721↓ε107356␈A013331 00022 PFP←BITS(PFPRO[PRP],12,23)+1;
␈Bβ¬WHILE↓ε107343βαDO␈A013334 00023 WHILE PFP>1 DO
␈Bβ¬BEGIN
∧PFPL␈A013334 00024 BEGIN "PFPL"
␈B↓ε107404↓ε107226↓ε073214↓ε107330↓ε072747↓ε107343␈A013347 00025 PRL2←PRL1←BITS(IB←PFEAT[PFP],24,33);
␈BβαIF↓ε072072β∧THEN↓ε107404↓ε073214↓ε107330␈A013356 00026 IF ¬FTSW THEN PRL2←BITS(IB,12,21);
␈B¬ε071345βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105153¬ε070544↓ε015167↓ε107152␈A013373 00027 QTRC(CL&"FEAT: "&CVS(KADR)&" SC-LNS: "&
␈B↓ε015167↓ε107200¬ε070605↓ε015167↓ε107371␈A013403 00028 CVS(SCL1)&BL&CVS(SCL2)&
␈B↓ε015167↓ε071577␈A013414 00029 " PROT: "&CVS(PROT)&" PR-LNS: "&
␈B↓ε015167↓ε107226¬ε070605↓ε015167↓ε107404¬ε070544␈A013431 00030 CVS(PRL1)&BL&CVS(PRL2)&CL);
␈B↓ε111465βαIF↓ε072072β∧THEN␈A013433 00031 DIR←IF FTSW THEN
␈B↓ε072556↓ε107445ββLSHβ∧ELSE␈A013441 00032 LFEAT[FTI] LSH -33 ELSE
␈B↓ε073214↓ε107330ββXOR↓ε111554↓ε073214↓ε111541␈A013456 00033 BITS(IB,34,34) XOR (ID←BITS(IC,35,35));
␈B↓ε111526↓ε106705↓ε107200↓ε107226↓ε111465␈A013463 00034 SUCC←MAP(SCL1,PRL1,DIR);
␈B↓ε111643␈A013465 00035 REVER←0;
␈B↓ε107677βαIF↓ε111526↓ε072426β∧LANDβ∧THEN␈A013472 00036 BA1: IF SUCC≥0∧MAPTRC LAND '100 THEN
␈Bβ¬BEGIN␈A013472 00037 BEGIN
␈B↓ε016437¬ε070544␈A013472 00038 OUTSTR(CL&"BEST(MAP) - PROT: "&
␈B↓ε073140↓ε071577¬ε070557↓ε015322↓ε072454↓ε015322↓ε072441¬ε070544␈A013526 00039 PNAME[PROT]QSCOR&CL);
␈B↓ε072222↓ε072324␈A013531 00040 LNCRE0←LNCRE2←1006;
␈B¬ε071317ββFOR↓ε111602β∧STEPβ¬UNTIL↓ε071612βαDO␈A013535 00041 LOOP(I1,1,PLIN,1)
␈B↓ε105331↓ε111732↓ε071727↓ε111602␈A013545 00042 MLCR(LPARTL(CMPIND,I1),1006);
␈B↓ε105726↓ε072426β∧LAND␈A013551 00043 UPPDAL(MAPTRC LAND '200);
␈B↓ε072222↓ε071653␈A013553 00044 LNCRE0←LNCS1;
␈B↓ε072324↓ε071666␈A013555 00045 LNCRE2←LNCS2;
␈B¬ε071317ββFOR↓ε111602β∧STEPβ¬UNTIL↓ε071612βαDO␈A013561 00046 LOOP(I1,1,PLIN,1)
␈B↓ε105550↓ε111732↓ε071727↓ε111602␈A013566 00047 REVIVE(LPARTL(CMPIND,I1))
␈BββEND␈A013570 00048 END;
␈Bβ∧CASE↓ε111526βαOFβ¬BEGINβαGO↓ε107766βαGO↓ε106323ββEND␈A013612 00049 CASE SUCC+1 OF BEGIN GO REV; ; GO ISO; ; END;
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 14-1
PARSE
␈B¬ε071271βπCOMMENT␈A013612 00050
_ PARSE cont;
␈B¬ε071271βπCOMMENT␈A013612 00002 _ We have here a maximal partial mapping for
013612 00003 this key. See if it is a maximal partial
013612 00004 for this iteration of PARSE. If it is,
013612 00005 then save inserted lines at LCREDE=1005.;
013612 00006
␈B↓ε111630↓ε072120␈A013612 00007 I3←¬BESTMP
␈B↓ε111526␈A013614 00008 ∨SUCC=2
␈B↓ε107076↓ε071727β∧LAND␈A013623 00009 ∨PARTS[CMPIND,0] LAND '777777777
␈B↓ε107076↓ε072120β∧LAND␈A013637 00010 > PARTS[BESTMP,0] LAND '777777777;
␈BβαIF↓ε111630β∧THEN␈A013640 00011 IF I3 THEN
␈Bβ¬BEGIN␈A013640 00012 BEGIN
␈B↓ε072120↓ε071727␈A013642 00013 BESTMP←CMPIND;
␈B¬ε071345βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105153¬ε070544¬ε070544␈A013652 00014 QTRC(CL&"New best partial"&CL)
␈BββEND␈A013652 00015 END;
␈B¬ε071317ββFOR↓ε107315β∧STEPβ¬UNTIL↓ε072263βαDO␈A013656 00016 LOOP(IA,1,MAXNOL,1)
␈BβαIF↓ε111615↓ε104734↓ε107315␈A013661 00017 IF (I2←LCRL(IA))=1005
␈B↓ε111630␈A013663 00018 ∧I3
␈B↓ε111615␈A013665 00019 ∨I2=1004
␈B↓ε111630␈A013670 00020 ∧¬I3
␈Bβ∧THEN↓ε105112↓ε107315β∧ELSE␈A013676 00021 THEN LINDL(IA,0) ELSE
␈BβαIF↓ε111630↓ε111615β∧THEN␈A013703 00022 IF I3∧I2=1004 THEN
␈B↓ε072543↓ε107315↓ε072543↓ε107315␈A013715 00023 LCREDE[IA]←LCREDE[IA]+1;
␈BβαIF↓ε111526β∧THENβαGO↓ε106323␈A013721 00024 IF SUCC=2 THEN GO ISO;
␈BβαIF↓ε071727↓ε071727β∧THEN␈A013726 00025 IF (CMPIND←CMPIND+1)>63 THEN
␈Bβ¬BEGIN␈A013726 00026 BEGIN
␈B¬ε071345βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105153¬ε070544␈A013733 00027 QTRC(CL&"Mappings in excess of 63."&
␈B¬ε070544␈A013736 00028 "Isolate best."&CL);
␈BβαGO↓ε106323␈A013737 00029 GO ISO
␈BββEND␈A013737 00030 END;
␈B↓ε107766βαIF↓ε111643↓ε111424β∧THEN␈A013743 00031 REV: IF ¬REVER∧ORD THEN
␈Bβ¬BEGIN␈A013743 00032 BEGIN
␈B↓ε111526↓ε106705↓ε107200↓ε107404βαIF↓ε072072β∧THEN↓ε111465␈A013747 00033 SUCC←MAP(SCL1,PRL2,IF FTSW THEN 1-DIR
␈Bβ∧ELSE↓ε073214↓ε107330ββXOR↓ε111554␈A013763 00034 ELSE BITS(IB,22,22) XOR ID);
␈B↓ε111643␈A013765 00035 REVER←1;
␈BβαGO↓ε107677␈A013766 00036 GO BA1
␈BββEND␈A013766 00037 END;
013766 00038
␈B¬ε071271βπCOMMENT␈A013766 00039 _ Display scene?;
013766 00040
␈BβαIF↓ε111526↓ε072003↓ε072426β∧LANDβ∧THEN␈A013776 00041 IF SUCC+1∧KMP∧MAPTRC LAND '200000 THEN
␈Bβ¬BEGIN␈A013776 00042 BEGIN
␈B↓ε016437¬ε070544␈A014001 00043 OUTSTR(CL&"SCENE");
␈B↓ε105726↓ε072426β∧LAND␈A014005 00044 UPPDAL(MAPTRC LAND '400000)
␈BββEND␈A014005 00045 END;
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 15-1
PARSE
␈B¬ε071271βπCOMMENT␈A014005 00046
_ PARSE cont;
␈B¬ε071271βπCOMMENT␈A014005 00002 _ Parsing process continues normally with next
014005 00003 key ( = scene-line(s) & prototype &
014005 00004 prototype-line(s) combination).;
014005 00005
␈B↓ε107343↓ε072747↓ε107343β∧LAND␈A014010 00006 PFP←PFEAT[PFP] LAND '7777
␈BββEND∞∧PFPL␈A014014 00007 END "PFPL";
␈B↓ε107356↓ε072721↓ε107356β∧LAND␈A014017 00008 PRP←PFPRO[PRP] LAND '7777
␈BββEND∞∧PRPL␈A014023 00009 END "PRPL";
␈B↓ε107254βαIF↓ε072072β∧THEN↓ε072072β∧ELSE↓ε072775↓ε107254β∧LAND␈A014036 00010 CFP←IF FTSW THEN -FTSW ELSE CFEAT[CFP] LAND '7777;
␈BββEND∞∧CFPL␈A014041 00011 END "CFPL";
014041 00012
␈B¬ε071271βπCOMMENT␈A014041 00013 _ Iterate at this point, starting by finding the best
014041 00014 unused key-feature at this stage.;
014041 00015
␈B↓ε072734↓ε107152↓ε072734↓ε107152ββLOR␈A014051 00016 PFPTR[KADR]←PFPTR[KADR] LOR '400000000000;
␈BβαGO↓ε111055␈A014052 00017 GO ITER;
014052 00018
␈B¬ε071271βπCOMMENT␈A014052 00019 _ Use l.f. keys as well, before deciding on mapping.;
014052 00020
␈B↓ε106323βαIF↓ε111526↓ε072072β∧THEN␈A014060 00021 ISO: IF SUCC<1∧FTSW<2 THEN
␈Bβ¬BEGIN␈A014060 00022 BEGIN
␈B↓ε072072↓ε072072␈A014063 00023 FTSW←FTSW+1;
␈B↓ε107417␈A014065 00024 LB←1;
␈B↓ε107432↓ε072365␈A014067 00025 UB←PLFTOT;
␈B↓ε107473↓ε072263␈A014071 00026 UBI←MAXNOL;
␈B↓ε107371↓ε107404↓ε111567␈A014075 00027 SCL2←PRL2←MXMXCM←0;
␈BβαIF↓ε072072β∧THEN¬ε071317ββFOR↓ε107315β∧STEPβ¬UNTIL↓ε072365βαDO↓ε072734↓ε107315␈A014105 00028 IF FTSW=2 THEN LOOP(IA,1,PLFTOT,1) PFPTR[IA]←
␈B↓ε072734↓ε107315β∧LAND␈A014114 00029 PFPTR[IA] LAND '377777777777;
␈B¬ε071345βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105153β∧CASE↓ε072072βαOF¬ε070544␈A014152 00030 QTRC((CASE FTSW OF("L","L","P"))&"F-keys"&CL);
␈BβαGO↓ε111055␈A014153 00031 GO ITER
␈BββEND␈A014153 00032 END;
014153 00033
␈B¬ε071271βπCOMMENT␈A014153 00034 _ Isolation of partial (or complete) object.;
␈B¬ε071271βπCOMMENT␈A014153 00035 _ First check if the parsing process is at an end.;
014153 00036
␈BβαIF↓ε072120↓ε111526β∧THEN␈A014157 00037 IF ¬BESTMP∧¬SUCC THEN
␈Bβ¬BEGIN␈A014157 00038 BEGIN
␈B¬ε071345βαIF↓ε071770↓ε072426β∧LANDβ∧THEN↓ε105153¬ε070544¬ε070544␈A014167 00039 QTRC(CL&"SCENE EXHAUST ED - END OF PARSE"&CL);
␈B↓ε071770↓ε072426␈A014172 00040 DTRACE←MAPTRC←0;
␈BβαIF↓ε071770β∧THENβ¬BEGIN↓ε015260↓ε071551↓ε071551ββEND␈A014177 00041 IF DTRACE THEN BEGIN CLOSE(DCHAN); DCHAN←-1;END;
␈BβεRETURN␈A014177 00042 RETURN
␈BββEND␈A014202 00043 END;
014202 00044
␈B¬ε071271βπCOMMENT␈A014202 00045 _ There is a partial or complete. Save mapping.;
014202 00046
␈B↓ε111615βαIF↓ε111526β∧THEN↓ε071727β∧ELSE↓ε072120␈A014211 00047 I2← IF SUCC=1 THEN CMPIND ELSE BESTMP;
␈B¬ε071317ββFOR↓ε111602β∧STEPβ¬UNTIL↓ε111656βαDO↓ε107076↓ε071564↓ε111602↓ε107076↓ε111615↓ε111602␈A014231 00048 LOOP(I1,0,PARTSI,1) PARTS[CURMAP,I1]←PARTS[I2,I1];
MAPS1 SAIL 17-SEP-73 13:23 MAPS1 16-1
PARSE
␈B¬ε071271βπCOMMENT␈A014231 00049
_ PARSE cont;
014231 00002
␈B¬ε071271βπCOMMENT␈A014231 00003 _ Now truck object off to LCREDE=2000+2*CURMAP.;
014231 00004
␈B↓ε071727↓ε071564␈A014235 00005 CMPIND←2000+2*CURMAP;
␈B↓ε111615↓ε072632↓ε072146↓ε107076↓ε071564ββLSH␈A014250 00006 I2←PLINES[N1←PARTS[CURMAP,0] LSH -30];
␈B¬ε071317ββFOR↓ε111602β∧STEPβ¬UNTIL↓ε111615βαDO↓ε105331↓ε111630↓ε111732↓ε071564↓ε111602↓ε071727↓ε104734↓ε111630␈A014274 00007 LOOP(I1,1,I2,1) MLCR(I3←LPARTL(CURMAP,I1),CMPIND+(LCRL(I3)≠1004));
␈BβαIF↓ε072426β∧LANDβ∧THEN␈A014277 00008 IF MAPTRC LAND '400 THEN
␈Bβ¬BEGIN␈A014277 00009 BEGIN
␈B↓ε016437¬ε070544↓ε073140↓ε072146¬ε070557↓ε015322↓ε072454↓ε015322↓ε072441¬ε070544␈A014333 00010 OUTSTR(CL&"BEST(PARSE) - PROT: "&PNAME[N1]QSCOR&CL);
␈B↓ε072222↓ε072324␈A014336 00011 LNCRE0←LNCRE2←1006;
␈B¬ε071317ββFOR↓ε111602β∧STEPβ¬UNTIL↓ε111615βαDO↓ε105331↓ε111732↓ε071564↓ε111602␈A014352 00012 LOOP(I1,1,I2,1) MLCR(LPARTL(CURMAP,I1),1006);
␈B↓ε105726↓ε072426β∧LAND␈A014356 00013 UPPDAL(MAPTRC LAND '1000);
␈B↓ε072222↓ε071653␈A014360 00014 LNCRE0←LNCS1;
␈B↓ε072324↓ε071666␈A014362 00015 LNCRE2←LNCS2;
␈B¬ε071317ββFOR↓ε111602β∧STEPβ¬UNTIL↓ε111615βαDO↓ε105550↓ε111732↓ε071564↓ε111602␈A014373 00016 LOOP(I1,1,I2,1) REVIVE(LPARTL(CURMAP,I1))
␈BββEND␈A014375 00017 END;
014375 00018
␈B¬ε071271βπCOMMENT␈A014375 00019 _ Finally clean up the scene, shipping all replaced lines
014375 00020 (partial lines belonging to the object but superceded as members
014375 00021 of the mapping) into oblivion at LCREDE=3000+CURMAP;
014375 00022
␈B↓ε106412␈A014376 00023 CLUPSC;
␈BβαIF↓ε072426β∧LANDβ∧THEN␈A014401 00024 IF MAPTRC LAND '4000000 THEN
␈Bβ¬BEGIN␈A014401 00025 BEGIN
␈B↓ε072311␈A014403 00026 LNCRE1←1;
␈B↓ε072324␈A014405 00027 LNCRE2←4000;
␈B↓ε104530␈A014407 00028 REGREF(11);
␈B↓ε072311↓ε071653␈A014411 00029 LNCRE1←LNCS1;
␈B↓ε072324↓ε071666␈A014413 00030 LNCRE2←LNCS2;
␈BββEND␈A014413 00031 END;
014413 00032
␈B¬ε071271βπCOMMENT␈A014413 00033 _ Now the scene may have changed in some relevant way, so before
014413 00034 going through a renewed cross-reference investigation and
014413 00035 feature-extraction, and continuing the parse, we perform an
014413 00036 UNXREF to detach topologically all removed or transferred lines.;
014413 00037
␈B↓ε073563␈A014414 00038 UNXREF;
␈BβαGO↓ε110116␈A014415 00039 GO REP
␈BββEND∞¬PARSE ε111055∧ITER ε110116βREP ε107766βREV ε106323βISO ε107677βBA1 ε107111¬PLMAP ε107302¬PVMAP ε107076¬PARTS ε107124εFLMAPS ε107267εMAXCOM ε107315αIA ε107330αIB ε107152∧KADR ε107343βPFP ε107254βCFP ε107356βPRP ε107200∧SCL1 ε107371∧SCL2 ε107226∧PRL1 ε107404∧PRL2 ε107417αLB ε107432αUB ε107445βFTI ε107473βUBI ε111465βDIR ε111513βIBB ε111376βICC ε111424βORD ε111526∧SUCC ε111541αIC ε111554αID ε111567εMXMXCM ε111602αI1 ε111615αI2 ε111630αI3 ε111643¬REVER ε111656εPARTSI ε111671εKLST.. ε111704εLPARTS ε111732εLPARTL∞¬PARSE␈A014512 00040 END "PARSE";
␈BββEND∞¬MAPS1 ε070325εKLST..ε070401αQCε070414βQCOε070427βQCRε070455πNOTHINGε070544αCLε070557¬QSCORε070605αBLε070633∧QENPε070661αQSε070707∧QESPε070735αQIε070763αQRε071011βQRIε071037βQRRε071065βQEPε071113∧QEIPε071141∧QERPε071167∧QFOPε071215¬QFOIPε071243¬QFORPε071271↓.ε071317∧LOOPε071345∧QTRCε071421∧DTRCε071373εLINSETε071447εBELCREε071475¬SAFEX ε071510αIA ε071551¬DCHAN ε071564εCURMAP ε071577∧PROT ε071612∧PLIN ε071625∧PVER ε071640βAD0 ε071653¬LNCS1 ε071666¬LNCS2 ε071701∧RAYS ε071714βICH ε071727εCMPIND ε071742∧BRCH ε071755βEOF ε071770εDTRACE ε072003βKMP ε072016βRUL ε072031¬MDCTR ε072044∧DISW ε072057εFLMIND ε072072∧FTSW ε072105¬LFDBT ε072120εBESTMP ε072133∧NPRS ε072146αN1 ε072161αN2 ε072174αTC ε072207βTCS ε072222εLNCRE0 ε072235¬NOEPA ε072250βNOL ε072263εMAXNOL ε072276εMAXNOV ε072311εLNCRE1 ε072324εLNCRE2 ε072337¬PFTOT ε072352¬MODIF ε072365εPLFTOT ε072400εMAXPLS ε072413εMAXPVS ε072426εMAPTRC ε072441βSCO ε072454∧CMPL ε072467∧RWIC ε072502∧RMAP ε072515∧DICH ε072543εLCREDE ε072556¬LFEAT ε072571εLVERCO ε072604∧LINK ε072617εLVERSI ε072632εPLINES ε072645εPVERTS ε072660¬PPTRL ε072673¬PLINE ε072706εPLINE2 ε072721¬PFPRO ε072747¬PFEAT ε072762∧LVER ε072775¬CFEAT ε072734¬PFPTR ε073010¬XVCOR ε073023¬YVCOR ε073036¬XLCOR ε073051¬YLCOR ε073064βCXL ε073077βCYL ε073112βCCL ε073125∧RLEN ε073140¬PNAME ε073153εLINDEL ε073214∧BITS ε073270πMAPCONV ε073357¬INREK ε073420εUPPDAT ε073474∧FTEX ε073522¬XREFC ε073563εUNXREF ε073624∧LACT ε073652εANGLIN ε073713¬LVOPP ε073767∧SQRT ε074030∧MAX0 ε103727∧KARN ε104003¬REKOP ε104174εWEIGHV ε104324εMAPREC ε104426εPRECAL ε104454∧CALC ε104502εLVNEXT ε104530εREGREF ε104604εMSCVCO ε104645εNEXVER ε104734∧LCRL ε104762∧LCRV ε105023¬DTRCE ε105112¬LINDL ε105153¬QTRCE ε105331∧MLCR ε105550εREVIVE ε105726εUPPDAL ε106056¬UNTST ε106160¬BREAK ε106412εCLUPSC ε106453εFUSABL ε107007¬LFDIF ε106705βMAP ε107725¬PARSE ε015035βOUT ε015113∧OPEN ε015167βCVS ε015260¬CLOSE ε015322∧CVOS ε015335¬ENTER ε016051εARRBLT ε016235εINCHRW ε016315¬INSTR ε016437εOUTSTR ε016467πGETCHAN␈A015170 00041 END "MAPS1";